package com.ambow.core.controller;


import com.ambow.core.dqUtil.RoleUtil;
import com.ambow.core.dqUtil.emailUtil;
import com.ambow.core.dqUtil.suiJiNumUtil;
import com.ambow.core.po.DqDeveloper;
import com.ambow.core.po.DqRole;
import com.ambow.core.po.DqUser;
import com.ambow.core.po.LoginForm;
import com.ambow.core.service.DqDeveloperService;
import com.ambow.core.service.DqFrozenService;
import com.ambow.core.service.DqRoleService;
import com.ambow.core.service.DqUserService;
import com.dq.gamepropaganda.common.R;
import com.dq.gamepropaganda.common.ResponseEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * <p>
 * 角色登录表	内涵三个角色	管理员	玩家	开发者 前端控制器
 * </p>
 *
 * @author dq
 * @since 2022-09-04
 */
//跨域
@CrossOrigin
@Api(tags="角色")
@RestController
@RequestMapping("/admin/dqRole")
public class DqRoleController {

    @Autowired
    private redisService redisService;
    @Autowired
    private DqRoleService dqRoleService;
    @Autowired
    private DqUserService dqUserService;
    @Autowired
    private DqDeveloperService dqDeveloperService;
    @Autowired
    private DqFrozenService dqFrozenService;
    StringBuffer randomNum = new StringBuffer();

    //点击后发送激活码
    //邮箱复制过来激活码
    @PostMapping("/email/{email}")
    @ApiOperation(value = "发送邮箱")
    public R roleZhuCe(@PathVariable String email){
        //接收要stringbuffer的
        randomNum = suiJiNumUtil.getRandomNum(6);
        String s = randomNum.toString();
        System.out.println(s);
        emailUtil.faeEail(email,s);
        return R.ok();
    }
    //验证邮箱
    @PostMapping("/yanZhengEmail/{yanZhengMa}")
    @ApiOperation(value = "验证邮箱")
    public R yanZhengEmail(@PathVariable String yanZhengMa){
        //接收要stringbuffer的
        if(randomNum.toString() == yanZhengMa){
            return R.ok().message("验证通过");
        }else {
            return R.error().message("验证码错误");
        }

    }

    //注册
    @PostMapping("/register")
    @ApiOperation(value = "注册")
    public R RoleRegister(@RequestBody DqRole role){
        //后端检查 防小人
        boolean b = findLoginByName(role.getRoleLogin());
        System.out.println("b"+b);
        if(b){
            return R.error().message("你小子666啊");
        }else {
            //判断开发者还是用户:因为完善信息在后面所以这个表只存登录信息
            //开发者
            if (role.getRoleRole() == 2){
                dqRoleService.save(role);
                DqDeveloper developer = new DqDeveloper();
                //创建一个只有id还未完善信息的开发者需要后期审核
                developer.setRoleId(role.getRoleId());
                System.out.println(developer);
                //dqDeveloperService.save(developer);
                dqDeveloperService.join(developer);
                return R.ok().data("role",role);
                //用户
            }else if (role.getRoleRole() == 3){
                DqUser user = new DqUser();
                //创建一个只有id还未完善信息的用户
                user.setRoleId(role.getRoleId());
                dqUserService.save(user);
                dqRoleService.save(role);
                return R.ok().data("role",role);
            }else {
                return R.error().message("角色未知");
            }

        }


    }
    //检查是否重名 用于注册时判断
    //用于前端 防君子
    @GetMapping("/findLoginByName")
    @ApiOperation("判断")
    public boolean findLoginByName(String name){
        //axios异步传入姓名
        if(dqRoleService.findRoleByName(name) != null){
            return true;
        }else {
            return false;
        }

    }
    // 登录
//    @PostMapping("/Login")
//    @ApiOperation("登录")
//    public R RoleLogin(String ming, String pass){
//        DqRole role = dqRoleService.findRoleByName(ming);
//        //(未实现)返回前台冻结结束时间
//        //如果未查到角色
//        if (role != null){
//            //(未实现)if查询是否冻结
//            if(dqFrozenService.roleIfDongJie(role.getRoleId())){
//                //设置单次密码错误不超过5次的计数器
//                int index = 0;
//                //如果错误大于5次
//                if ( index > 5){
//                    //(未实现)冻结,加时间,
//                    return R.error().message("密码已达上限请稍后再试");
//                    //如果密码一致
//                }else if( role.getRolePass().equals(pass)){
//                    System.out.println("密码一致");
//                    //添加对象至redis
//                    redisService.add(role.getRoleId(), role, 1, TimeUnit.HOURS);
//                    RoleUtil.setRoleId(role.getRoleId());
//                    //                DqRole dqRole = redisService.getObject(role.getRoleId(), DqRole.class);
//                    //                String s = redisService.get(role.getRoleId());
//                    //                System.out.println("reids里的数据"+s);
//                    //                System.out.println("reids里的数据转换完成为"+dqRole);
//                    return R.ok().data("LoginRole",role).code(20000).message("登录成功");
//                }else {
//                    index++;
//                    //密码错误
//                    return R.setResult(ResponseEnum.PASS_ERROR);
//                }
//            }else {
//                return R.error().message("账号已被冻结");
//            }
//
//        }else {
//            return R.error().message("用户不存在");
//        }
//    }

    @GetMapping("/roleLogin/{username}/{password}")
    @ApiOperation("登录")
    public R RoleLogin(@PathVariable String username,@PathVariable String password){
        String ming = username;
        String pass = password;
        DqRole role = dqRoleService.findRoleByName(ming);
        //(未实现)返回前台冻结结束时间
        //如果未查到角色
        if (role != null){
            //(未实现)if查询是否冻结
            if(!dqFrozenService.roleIfDongJie(role.getRoleId())){

                //设置单次密码错误不超过5次的计数器
                int index = 0;
                //如果错误大于5次
                if ( index > 5){
                    //(未实现)冻结,加时间,
                    return R.error().message("密码已达上限请稍后再试");
                    //如果密码一致
                }else if( role.getRolePass().equals(pass)){
                    System.out.println("密码一致");
                    //添加对象至redis
                    redisService.add(role.getRoleId(), role, 1, TimeUnit.HOURS);
                    RoleUtil.setRoleId(role.getRoleId());
                    //                DqRole dqRole = redisService.getObject(role.getRoleId(), DqRole.class);
                    //                String s = redisService.get(role.getRoleId());
                    //                System.out.println("reids里的数据"+s);
                    //                System.out.println("reids里的数据转换完成为"+dqRole);
                    return R.ok().data("LoginRole",role).code(20000).message("登录成功");
                }else {
                    index++;
                    //密码错误
                    System.out.println("获取到的"+role.getRolePass()+pass+role.getRolePass().equals(pass));
                    return R.setResult(ResponseEnum.PASS_ERROR);
                }
            }else {
                System.out.println(dqFrozenService.roleIfDongJie(role.getRoleId()));
                return R.error().message("账号已被冻结");
            }

        }else {
            return R.error().message("用户不存在");
        }
    }
//    @PostMapping("/roleLogin")
//    @ApiOperation("登录")
//    public R RoleLogin(@RequestParam LoginForm lo){
//        System.out.println("++++++++"+lo);
//        //System.out.println(loginForm);
//        return R.ok();
//    }

    @GetMapping("/info")
    @ApiOperation("获取token")
    public R info(){
        //String token = RoleUtil.getRoleId().toString();
        System.out.println("token");
        Integer token = RoleUtil.getRoleId();
        token.toString();
        return R.ok().data("token",token);
    }

    //查
    @GetMapping("/list")
    @ApiOperation("查所有用户")
    public R listAll(){
        List<DqRole> list = dqRoleService.list();
        return R.ok().message("什么鬼").data("list",list);
    }
    //根据id查
    @PostMapping("/findListById")
    @ApiOperation("查单个用户")
    public R findListById(Integer roleId){
        DqRole role = dqRoleService.getById(roleId);
        return R.ok().message("什么鬼").data("role",role);
    }
    //

}

